package common

import (
	"fmt"
	"github.com/mozillazg/go-pinyin"
	uuid "github.com/satori/go.uuid"
	"math/rand"
	"os"
	"strconv"
	"time"
)

func GetYmdHis() string {
	return time.Now().Format("20060102150405")
}

func GetMicroTimestamp() string {
	return strconv.FormatInt(time.Now().UnixNano()/1e6, 10)
}

// 生成随机字符串
func RandomString(n int) string {
	var letters = []byte("0123456789asdfghjklzxcvbnmqwertyuiopASDFGHJKLZXCVBNMQWERTYUIOP")
	result := make([]byte, n)
	rand.Seed(time.Now().Unix())
	for i := range result {
		result[i] = letters[rand.Intn(len(letters))]
	}
	return string(result)
}

// 生成随机数字
func GenerateRandomNumber() int {
	// 使用当前时间作为随机数生成器的种子
	rand.Seed(time.Now().UnixNano())
	// 生成一个介于[10, 100)区间内的随机整数
	return rand.Intn(91) + 10
}

// 获取变量的数据类型
func GetVariableType(x interface{}) string {
	switch x.(type) { //此处的 v 存储的是变量 x 的动态类型对应的值信息
	case nil:
		return "nil"
	case int, int64, int32:
		return "int"
	case float64, float32:
		return "int"
	case string:
		return "string"
	case bool:
		return "bool"
	default:
		return "unknown"
	}
}

// 格式化时间戳
func FormatTimestamp(timestamp int64) string {
	t := time.Unix(timestamp, 0)
	return t.Format("2006-01-02 15:04:05")
}

// 通用的获取列表的请求参数
type CommonListRequest struct {
	Page     int `json:"page"`      //当前第几页
	PageSize int `json:"page_size"` //每页显示多少条
}

// 中文转拼音
func ConvertChineseToPinyin(str string) string {
	pinyinList := pinyin.Pinyin(str, pinyin.NewArgs())
	res := ""
	for _, pinyinSlice := range pinyinList {
		if len(pinyinSlice) > 0 {
			res += pinyinSlice[0]
		}
	}
	return res
}

func CreateUuid() string {
	return uuid.NewV4().String()
}
func P(data interface{}) {
	fmt.Println(data)
}
func PE(data interface{}) {
	fmt.Println(data)
	os.Exit(1)
}
